package com.jf.car.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CharacterEncodingFilter implements Filter {
    /*声明了一个私有的 FilterConfig 类型的成员变量，用于存储过滤器的配置信息。*/
    private FilterConfig filterConfig;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        /*传入的 FilterConfig 对象赋值给成员变量 filterConfig，以便后续使用。*/
        this.filterConfig=filterConfig;
    }

    @Override
    /*该方法在每次请求经过该过滤器时被调用。*/
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        /*从过滤器的配置信息中获取 charset 和 contentType 的初始化参数。*/
        String charset = this.filterConfig.getInitParameter("charset");
        String contentType = this.filterConfig.getInitParameter("contentType");

        /*设置请求和响应的字符编码。*/
        response.setCharacterEncoding(charset);
        /*设置响应的内容类型。*/
        response.setContentType(contentType);

        /*获取当前应用的上下文路径，并添加一个斜杠，作为 basePath。*/
        String basePath = request.getContextPath()+"/";

        /*将 basePath 设置为请求的属性，以便在后续的 Servlet 或 JSP 中使用。*/
        request.setAttribute("basePath",basePath);

        /*调用过滤器链中的下一个过滤器或目标 Servlet。*/
        filterChain.doFilter(request,response);

    }

    @Override
    public void destroy() {
        this.filterConfig = null;
    }
}
